//
//  main.m
//  04-集合（2）
//
//  Created by 韩旭 on 16/7/7.
//  Copyright © 2016年 基础. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Contact.h"
#import "ContactManger.h"
int main(int argc, const char * argv[]) {
#pragma mark -
#if 0
    {
        //   1.字典
        //   字典是存储键值对（key - value）的集合类型
        //     字典中存储的数据是没有顺序
        //    通过key值存储、查找 value
        //    1> 初始化
        //    initWithObjectsAndKeys:value, key, value, key, ...
        //    字典中只能存放对象类型（NSObject的子类）
        //    如果出现汉字，代码提示, 一定会失效
        NSDictionary *dic = [NSDictionary dictionary];
        NSDictionary *dic1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"李四", @"name", @"15", @"age", nil];
        //    2> 构造器
        NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"李四", @"name", @"15", @"age", nil];
        //    3> 推荐使用 字面量 字符串@""  数值对象类型NSNuber@() 数组@[]  字典@{key : value, key : value}
        NSDictionary *diction= @{@"name": @"张合蔚",
                                 @"age":@(25)};
        //    4> 取值
        //    <1>
        //    通过key取value
        NSString *name = [diction objectForKey:@"name"];
        NSLog(@"%@",name);
        //    <2> 获取所有的key
        NSArray *allkeys = diction.allKeys;
        NSLog(@"%@",allkeys);
        //    <3> 获取所有的value
        NSArray *allValue = diction.allValues;
        NSLog(@"%@",allValue);
        //    <4> count
        NSUInteger count = diction.count;
        //    <5>
        NSArray *arrKey = [diction objectsForKeys:diction.allKeys notFoundMarker:[NSString class]];
        
        NSLog(@"%@",arrKey);
        //    <6> 通过一个对象，查找所有value是这个对象的所有key
        NSArray *array = [diction allKeysForObject:@"张合蔚"];
        NSLog(@"%@",array);
        //    <7> 语法糖取值 arr[下标] diction[key]
        NSLog(@"%@",diction[@"name"]);
        
        //    可变字典NSMutableDictionary
        //    1.初始化方式（不推荐使用字面量） 与 不可变字典基本相同
        NSMutableDictionary *ddci = [@{@"name" : @"小明", @"age" : @(12)} mutableCopy];
        
        //    2. 取值 与不可变字典相同
        
        //    3. 曾 删 改
        //    1> 添加 setObject:value forKey:key
        //    如果key已经存在, 会将之前的value覆盖
        //    如果key不存在, 会直接添加
        //    注意：字典中的key不要重复, 如果重复, 会以最后的value进行覆盖
        [ddci setObject:@"小比龙" forKey:@"name"];
        NSLog(@"%@",ddci);
        //   删除2>
        [ddci removeAllObjects];
        NSLog(@"%@",ddci);
        //    3> 语法糖 与setObject：forkey：相同
        ddci[@"name"] = @"例";
    }
#endif
    
#pragma mark -
#if 0
    {
        //        需求：1、定义联系人类Contact。实例变量：姓名(拼音，首字母大写)、性别、电话号码、住址、分组名称、年龄。方法：自定义初始化方法(姓名、电话号码)、显示联系人信息。
        //        2、在main.m中定义字典，分组管理所有联系人。分组名为26个大写的英文字母。
        //        3、可以添加联系人对象，如果姓名或电话号码为空，添加失败。添加联系人到匹配的分组。
        //        4、删除某个分组的全部联系人。
        Contact *contact = [[Contact alloc] initWithName:@"小王" PhotoNumber:@"110"];
        //        Contact *contact2 = [[Contact alloc] initWithName:@"小黑" PhotoNumber:@"153"];
        //        Contact *contact3 = [[Contact alloc] initWithName:@"小龙" PhotoNumber:@"sb"];
        contact.groupName = @"X";
        [contact showContact];
        NSMutableDictionary *dicMutables = [NSMutableDictionary dictionary];
        //        key : A~Z value : NSMutableArray
        //        判断名字和手机号是不是空值
        if ([contact.name isEqualToString:@""] && [contact.phoneNumber isEqualToString:@""]) {
            //            否则添加失败
            NSLog(@"添加失败");
        } else {
            //          都不是空值可以添加
            //            通过联系人的分组名, 取到对应的分组数组
            NSMutableArray *contactArr = [dicMutables objectForKey:contact.groupName];
            //            判断数组是否存在
            if (contactArr.count == 0) {
                //                数组不存在, 创建数组
                contactArr = [NSMutableArray array];
                [contactArr addObject:contact];
                [dicMutables setObject:contactArr forKey:contact.groupName];
            } else {
                //                 数组存在, 直接添加
                [contactArr addObject:contact];
            }
            NSLog(@"添加成功");
        }
    }
#endif
#pragma mark - 联系（）
#if 1
    { //        需求：1、定义联系人类Contact。实例变量：姓名(拼音，首字母大写)、性别、电话号码、住址、分组名称、年龄。方法：自定义初始化方法(姓名、电话号码)、显示联系人信息。
        //        2、在main.m中定义字典，分组管理所有联系人。分组名为26个大写的英文字母。
        //        3、可以添加联系人对象，如果姓名或电话号码为空，添加失败。添加联系人到匹配的分组。
        //        4、删除某个分组的全部联系人。
        Contact *contact = [[Contact alloc] initWithName:@"小王" PhotoNumber:@"110"];
        Contact *contact1 = [[Contact alloc] initWithName:@"小李" PhotoNumber:@"110"];
        Contact *contact2 = [[Contact alloc] initWithName:@"小红" PhotoNumber:@"110"];
        Contact *contact3 = [[Contact alloc] initWithName:@"小名" PhotoNumber:@"110"];
        //        Contact *contact2 = [[Contact alloc] initWithName:@"小黑" PhotoNumber:@"153"];
        //        Contact *contact3 = [[Contact alloc] initWithName:@"小龙" PhotoNumber:@"sb"];
        contact.groupName  = @"X";
        contact1.groupName = @"L";
        contact2.groupName = @"H";
        contact3.groupName = @"M";
        [contact showContact];
        NSMutableDictionary *dicMutables = [NSMutableDictionary dictionary];
        ContactManger *contactManger = [[ContactManger alloc] initWithDictionary:dicMutables];
        [contactManger addContact:contact];
        [contactManger addContact:contact1];
        [contactManger addContact:contact2];
        [contactManger addContact:contact3];
        NSLog(@"sdfdf%@", contactManger.dicManger);
//        2.集合
//        不可变 NSSet 可变 NSMutableSet
//        1> 初始化
//       集合会删除掉重复的内容(互异性)
//        要删除数组或者字典中重复的内容, 放入集合中
        NSSet *set = [[NSSet alloc] initWithObjects:@"小比",@"小王", nil];
        NSLog(@"%@",set);
//        2> 构造器
       NSSet *setObject = [NSSet setWithObjects:@"雨涵",@"雨涵", nil];
        NSLog(@"%@",setObject);
//        3> 没有提供集合的字面量
//        取值
//        从集合中取出任意元素
        [set anyObject];
//        count
        NSUInteger count = set.count;
//      集合去重（删除掉数组中重复的元素）
        NSArray *repeatArray = @[@10, @20, @30, @10, @30, @100];
        NSSet *repeatSet = [NSSet setWithArray:repeatArray];
        NSLog(@"%@", repeatSet);
        NSLog(@"%@", repeatArray);
//        可变集合NSMutableSet
//        1> 初始化与不可变集合一样
//        2> 取值 anyObject
//        3> 可变集合 可变性
        NSMutableSet *mutableSet = [NSMutableSet set];
//        添加
        [mutableSet addObject:@"123"];
//        删除
        [mutableSet removeObject:@"123"];
        [mutableSet removeAllObjects];
    }
#endif
    
    
    return 0;
}


